package com.javacoo.swing.jxbrowser.content;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.javacoo.swing.jxbrowser.BaseBrowser;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.Callback;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

/**
 * 导航历史
 * <li></li>
 * JxBrowser提供了用于处理导航历史记录的API。使用此API，您可以获取有关导航条目的信息，必须在指定索引处输入，删除导航条目等。
 * 注意：创建Browser实例时，默认情况下导航到 about：blank网页，因此导航历史记录中始终有一个条目。
 * 接收导航条目计数
 * 返回后退/前进列表中的条目数。
 *
 * int entryCount = browser.getNavigationEntryCount();
 *
 * 当前导航条目的索引
 * 返回后退/前进列表中当前导航条目的索引。
 *
 * int index = browser.getCurrentNavigationEntryIndex();
 *
 *
 * 导航到索引处的条目
 * 导航到后退/前进列表中特定索引处的条目。
 *
 * browser.goToIndex(index);
 *
 * 删除索引处的条目
 * 从特定索引处的后退/前进列表中删除导航条目。
 *
 * boolean success = browser.removeNavigationEntryAtIndex(index);
 *
 * 获取有关导航条目的信息
 * 在特定索引处打印有关导航条目的信息。
 *
 * NavigationEntry navigationEntry = browser.getNavigationEntryAtIndex(index);
 * System.out.println("URL = " + navigationEntry.getURL());
 * System.out.println("Original URL = " + navigationEntry.getOriginalURL());
 * System.out.println("Title = " + navigationEntry.getTitle());
 *
 * 清除整个导航历史记录
 * @author: duanyong@jccfc.com
 * @since: 2020/9/25 10:22
 */
public class NavigationHistory extends BaseBrowser {
    public static void main(String[] args) {
        Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        loadURLAndWaitReady(browser, BASE_URL);
        loadURLAndWaitReady(browser, "https://gitee.com/javacoo/CowSwing");

        // Returns the number of entries in the back/forward list.
        int entryCount = browser.getNavigationEntryCount();
        // Remove navigation entries at index.
        for (int i = entryCount - 2; i >= 0; i--) {
            boolean success = browser.removeNavigationEntryAtIndex(i);
            System.out.println("Navigation entry at index " + i +
                " has been removed successfully? " + success);
        }
    }

    private static void loadURLAndWaitReady(Browser browser, final String url) {
        Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() {
            @Override
            public void invoke(Browser value) {
                value.loadURL(url);
            }
        });
    }
}
